//大麦网自动登录 实现本地存储登录状态
// @ts-check
import { test, expect } from "@playwright/test";
import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 保存localStorage到本地文件
const LOCAL_STORAGE_FILE = path.join(
  __dirname,
  "..",
  "chaoxing-localstorage.json"
);
// 上次访问的页面
const LAST_URL_FILE = path.join(__dirname, "..", "chaoxing-last-url.txt");
// 保存cookie到本地文件
const COOKIES_FILE = path.join(__dirname, "..", "chaoxing-cookies.json");

test("大麦自动登录 - 支持状态保存", async ({ page, context }) => {
  console.log("🚀 启动大麦自动登录脚本...");

  // 尝试加载已保存的 localStorage
  let hasValidStorage = false;
  let lastVisitedUrl = "https://passport.damai.cn/login";

  try {
    // 加载cookie到浏览器
    if (fs.existsSync(COOKIES_FILE)) {
      const cookiesData = JSON.parse(fs.readFileSync(COOKIES_FILE, "utf-8"));
      await context.addCookies(cookiesData);
    }
    // 检查 localStorage 文件是否存在
    if (fs.existsSync(LOCAL_STORAGE_FILE)) {
      const storageData = JSON.parse(
        fs.readFileSync(LOCAL_STORAGE_FILE, "utf-8")
      );

      // 先访问页面，然后设置 localStorage
      await page.goto("https://passport.damai.cn/login", {
        waitUntil: "networkidle",
        timeout: 60000,
      });
      await page.waitForLoadState("domcontentloaded");
      await page.evaluate((data) => {
        // 设置所有 localStorage 项
        Object.keys(data).forEach((key) => {
          localStorage.setItem(key, data[key]);
        });
      }, storageData);

      console.log("✅ 成功加载已保存的登录状态");
      hasValidStorage = true;

      // 加载上次访问的URL
      if (fs.existsSync(LAST_URL_FILE)) {
        lastVisitedUrl = fs.readFileSync(LAST_URL_FILE, "utf-8").trim();
        console.log(`📖 上次访问的页面: ${lastVisitedUrl}`);
      }
    } else {
      console.log("ℹ️  未找到保存的登录状态，将进行首次登录");
    }
  } catch (error) {
    console.log("⚠️  加载登录状态失败，将重新登录:", error.message);
    hasValidStorage = false;
  }

  // 如果有有效的 localStorage，直接跳转到上次访问的页面
  if (hasValidStorage) {
    console.log("🔄 尝试使用已保存的登录状态访问页面...");
    await page.goto(lastVisitedUrl); //跳转到上次访问的页面
    await page.waitForLoadState("networkidle"); //等待网络空闲
    alert("正在跳转");
    // 验证登录状态是否仍然有效
    const currentUrl = page.url();
    console.log(`当前页面URL: ${currentUrl}`);

    console.log("🎉 登录状态有效，已成功访问页面！");
    console.log(`页面标题: ${await page.title()}`);
    await page.evaluate(() => {
      window.scrollTo(0, 500);
    });
    console.log("滚动完成");
    await page.waitForTimeout(2000);

    await page
      .getByRole("link", {
        name: "落日飞车「Q去Q来」2025巡回演出-北京站 蛙厂RMMF",
      })
      .click();
    console.log("点击完成");
    // 等待新标签页打开
    const newPagePromise = context.waitForEvent("page");
    // 切换到新标签页
    console.log("✅ 成功切换到写文章页面");
    const newPage = await newPagePromise;
    await newPage.waitForLoadState("networkidle");
    await newPage.evaluate(() => {
      window.scrollTo(0, 500);
    });
    console.log("滚动完成");
    await newPage.waitForTimeout(10000);
    await newPage.getByText("不，立即购票").click();
    await newPage.waitForLoadState("networkidle");
    await newPage.locator(".viwer-info-name", { hasText: "邹亦橙" }).click();
    await newPage.locator("span:has-text('立即提交')").click();
    return; // 登录状态有效，直接结束
  }

  // 如果没有有效存储或已过期，进行登录流程
  console.log("📝 开始手动登录流程...");

  // 确保在登录页面
  if (!page.url().includes("damai.cn")) {
    await page.goto("https://passport.damai.cn/login");
    await page.waitForLoadState("networkidle");
  }

  console.log("页面已加载完成，现在查看页面元素...");

  // 等待用户手动填写表单
  console.log("👤 请在浏览器中手动填写用户名和密码...");
  console.log("🔑 填写完成后，请手动点击登录按钮");
  console.log("⏳ 系统将自动检测登录状态变化并保存登录信息...");

  // 监听页面导航变化来检测登录
  let loginSuccess = false;
  let finalUrl = "";

  //监听网络请求变化
  page.on("response", async (response) => {
    // 监听登录相关的API响应
    if (
      response.url().includes("login") ||
      response.url().includes("passport")
    ) {
      const status = response.status();
      console.log(`🔍 检测到请求: ${response.url()}, 状态码: ${status}`);
    }
  });

  try {
    // 等待页面跳转或登录成功的标志
    await page.waitForFunction(
      () => {
        // 检查URL是否已经跳转（通常登录成功后会跳转到主页面）
        return (
          window.location.href !== "https://passport.damai.cn/login" &&
          !window.location.href.includes("login")
        );
      },
      { timeout: 120000 }
    ); // 等待2分钟

    loginSuccess = true;
    finalUrl = page.url();
    console.log("🚩 成功获取登录成功标志");
  } catch (error) {
    console.log("⚠️ 等待登录成功超时，尝试其他检测方式...");
    return;
  }

  // 如果登录成功，保存 localStorage 和当前URL
  if (loginSuccess) {
    try {
      // 获取并保存 localStorage
      const localStorageData = await page.evaluate(() => {
        const data = {};
        for (let i = 0; i < localStorage.length; i++) {
          const key = localStorage.key(i);
          if (key) {
            data[key] = localStorage.getItem(key);
          }
        }
        return data;
      });
      //保存localStorage到本地文件
      fs.writeFileSync(
        LOCAL_STORAGE_FILE,
        JSON.stringify(localStorageData, null, 2)
      );
      //获取cookie所有的值，并保存到本地文件;
      const cookies = await context.cookies();
      fs.writeFileSync(COOKIES_FILE, JSON.stringify(cookies, null, 2));
      console.log("💾 Cookie与localStorage已保存到本地");

      // 保存当前URL
      fs.writeFileSync(LAST_URL_FILE, finalUrl);
      console.log(`📚 当前页面URL已保存: ${finalUrl}`);

      console.log("\n🔄 下次运行脚本时将自动使用已保存的登录状态");
    } catch (error) {
      console.log("⚠️  保存登录状态时出错:", error.message);
    }
  } else {
    console.log("❌ 登录流程未完成或失败");
    console.log("请重新运行脚本并确保正确填写登录信息");
  }
});

// test("test", async ({ page }) => {
//   // Recording...
//   await page.goto("https://www.damai.cn/");
//   console.log("重新进入");

//   await page.waitForLoadState("networkidle");
//     //页面向下滚动500px
//     await page.evaluate(() => {
//       window.scrollTo(0, 500);
//     });
//     console.log("滚动完成");
//   await page.waitForTimeout(10000);

//   await page
//     .getByRole("link", {
//       name: "落日飞车「Q去Q来」2025巡回演出-北京站 蛙厂RMMF",
//     })
//     .click();
//     console.log("点击完成");
//     await page.waitForTimeout(50000);
//   // const page1 = await page.waitForEvent("popup");
//   // await page1.getByText("不，立即购票").click();
//   // await page1.goto(
//   //   "https://m.damai.cn/app/dmfe/h5-ultron-buy/index.html?exParams=%7B%22damai%22%3A%221%22%2C%22channel%22%3A%22damai_app%22%2C%22umpChannel%22%3A%2210002%22%2C%22atomSplit%22%3A%221%22%2C%22serviceVersion%22%3A%221.8.5%22%2C%22signKey%22%3A%22cEl2aHFaXgxqRFl9S091eXdfe2Z1XF0Kak1felo3GBcTIgoSBzI6bBIgOB9aCz09ER8uMDUEHVE2B1d%2FS0lufndbf2ZnDgZUPBpWfFVLZHl4XHhvcF1PWzwYAiJCTWY%3D%22%2C%22umidToken%22%3A%22T2gAZbHZkDUQ8y3UxYjPIKuVBytrosABYnuTTy7S_COtPtLGij6Sw0x4CQdj5LTpCyA%3D%22%2C%22ua%22%3A%22140%23fRSoqvqVzzWptzo2%2BbSQ4pN8s9zfWWqbu%2BZCLlQV%2BYLDe9KBbt%2FLTxb6D90b4ZfL4Qvolp1zzX8rB5I6JzzxoK8mO6h%2Fzzrb22U3lp1xzq%2BiV2EqlaOz2PD%2BVofdi%2B80MI2y7yDY5acwagFhC3lsLWJ8Vr%2BfD04D0gSQqIMQ7qQX7zmd3hOeQHdu1M2tbtFo1AVHA3oHGy6gV1v1Z9ZW7V0pRF3PxCUS9xJowk3kVIEOtHqkk2SG4dW1wGdNaAfYc6ng%2FkUJVD6BiTlfthLBtm7h4Q%2FL5yNKLDSZv8SzXTmYdE0lOeUVZ4xDyVgM2vkEbAMnPJOYZRZa4GR1Pn4oIe6md334Og8ytvo4pj5p%2BIrpbmrk0b7I71WlH5xdarwz528QjkohLi0Q0IpRMzyZpWc3wk2dpxk8FpY3LkCUNF4VlYJS7%2B4hStVTv5Crk4Rov9jzq%2Fscy6x6VkLB1YfJl%2Bn%2Fp32LACGBtDgkLBqq2nFjuftOGbwcO5konZpKQw2K6zavTcDqmDyJjk4WTwh1Mk8eWBb2kMwBLvu%2BoxJDCKSYTyocR5ix%2Buclu6pU6chl6t%2FL433SMxl8C2wti2NCXFF2%2FOi03ceKkD%2FmfFR7Rj1OEjwNN%2F6K5nFXD%2BqSITEFnrp%2BdvWkqd%2FNkPnDfpZuLZdyXqpLXKl1xVW%2FrCRL%2FU5ppLMD7s9pCSbXEXVL%2F8E4yIwxOjhstrzLO67RgbhVHlSP2M5Cpz4XDtonecBMr%2BZR2E0jZgBUz23kOP%2BSfeGZFz3LBk3s5zrlj0uc8m6pI%2B5NO%2FolIhIsZXeS9uDWc5SDCiNqexHut0Bw0DCpjaihwwX1p1ylY53ehB%2B%3D%22%7D&buyParam=960774904127_1_6055943518777&buyNow=true&privilegeActId=&rtc=1"
//   // );
//   // const page2Promise = page.waitForEvent("popup");
//   // await page
//   //   .getByRole("link", {
//   //     name: "落日飞车「Q去Q来」2025巡回演出-北京站 蛙厂RMMF",
//   //   })
//   //   .click();
//   // const page2 = await page2Promise;
//   // await page2.getByText("成都站", { exact: true }).click();
//   // await page2.getByText("不，立即购票").click();
//   // await page2.getByRole("textbox", { name: "请填写联系人手机号" }).click();
//   // await page2.getByRole("textbox", { name: "请填写联系人手机号" }).click();
//   // await page2.getByRole("textbox", { name: "请填写联系人手机号" }).click();
//   // await page2.getByRole("textbox", { name: "请填写联系人手机号" }).click();
//   // await page2.getByRole("textbox", { name: "请填写联系人手机号" }).click();
//   // await page2.locator(".viwer-info-name").click();
// });
